import Stack from '@/sources/Stack/useSl'
/**
 * 匹配括号 ts
 */
export const matchBrackets = (str: string) => {
    // 判空
    if (typeof str !== 'string' || str === '') return false
    const stack = new Stack<string>();
    const len = str.length;
    let i = 0;
    let match: Record<string, string> = {
        '{': '}',
        '[': ']',
        '(': ')'
    }
    // []{} ({})
    for (; i < len; i++) {
        const s = match[str[i]]
        if (s === '}' || s === ')' || s === ']') {
            // console.log(s)
            stack.push(str[i])
        } else {
            // 栈中还没有数据，直接返回false
            if (stack.isEmpty()) return false;
            // 属于右边的括号

            // 取出左边的括号
            const t = stack.pop()!
            // debugger
            if (match[t] !== str[i]) return false
        }
    }

    // 遍历完了栈中还有数据，说明左边括号多
    if (!stack.isEmpty()) return false
    return true
}

// js
// export const m = (s: any) => {
//     // 判空
//     if (typeof s !== 'string' || s === '') return false
//     const stack = [];
//     const len = s.length;
//     let i = 0;
//     let match = {
//         '{': '}',
//         '[': ']',
//         '(': ')'
//     }
//     // []{} ({})
//     for (; i < len; i++) {
//         const str = match[s[i]]
//         if (str === '}' || str === ')' || str === ']') {
//             // console.log(s)
//             stack.push(s[i])
//         } else {
//             // 栈中还没有数据，直接返回false
//             if (!stack.length) return false;
//             // 属于右边的括号

//             // 取出左边的括号
//             const t = stack.pop()
//             // debugger
//             if (match[t] !== s[i]) return false
//         }
//     }

//     // 遍历完了栈中还有数据，说明左边括号多
//     if (stack.length) return false
//     return true
// }
